Análise Exploratória

##   rows columns discrete_columns continuous_columns all_missing_columns
## 1 2380      37               26                 11                   0
##   total_missing_values complete_rows total_observations memory_usage
## 1                    0          2380              88060      1060944

Visualizando os tipos de colunas do banco de dados

Visulizando a distribuição de valores ausentes

Visulizando a distribuição do preenchimento das principais colunas

Visulizando os tipos e formatos de valores das colunas

## 'data.frame':    2380 obs. of  37 variables:
##  $ data                     : chr  "2021-01-01" "2021-01-01" "2021-01-02" "2021-01-02" ...
##  $ hora                     : chr  "19:44:00" "23:15:40" "10:54:00" "11:13:00" ...
##  $ natureza_acidente        : chr  "COM VÍTIMA" "COM VÍTIMA" "COM VÍTIMA" "COM VÍTIMA" ...
##  $ situacao                 : chr  "FINALIZADA" "FINALIZADA" "FINALIZADA" "FINALIZADA" ...
##  $ bairro                   : chr  "MADALENA" "VÁRZEA" "VASCO DA GAMA" "BOA VIAGEM" ...
##  $ endereco                 : chr  "RUA BENFICA" "AV CAXANGA" "RUA RESPLENDOR" "RUA VISCONDE DE JEQUITINHONHA" ...
##  $ numero                   : chr  "" "" "353" "22" ...
##  $ detalhe_endereco_acidente: chr  "" "RUA GASTAO VIDIGAL" "" "RUA CAPITAO ZUZINHA" ...
##  $ complemento              : chr  "EM FRENTE AO EXTRA NA SAIDA" "EM FRENTE A UPA DA CAXANGA" "AO  LADO  DO  COLEGIO ADERBAL  GALVÃO  EM  FRENTE  AO  CONJUNTO RESIDENCIAL  ADERBAL  GALVÃO" "RUA CAPITÃO ZUZINHA" ...
##  $ bairro_cruzamento        : chr  "MADALENA" "VÁRZEA" "VASCO DA GAMA" "BOA VIAGEM" ...
##  $ num_semaforo             : chr  "" "281" "" "" ...
##  $ sentido_via              : chr  "SUBURBIO" "CIDADE" "" "SUBURBIO" ...
##  $ tipo                     : chr  "COLISÃO FRONTAL" "COLISÃO TRASEIRA" "COLISÃO COM CICLISTA" "COLISÃO LATERAL" ...
##  $ auto                     : int  1 2 1 1 1 1 1 2 2 1 ...
##  $ moto                     : int  1 0 1 1 1 0 1 0 0 1 ...
##  $ ciclom                   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ ciclista                 : int  0 0 1 0 0 0 0 0 0 0 ...
##  $ pedestre                 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ onibus                   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ caminhao                 : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ viatura                  : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ outros                   : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ vitimas                  : int  1 1 1 1 2 0 1 0 0 1 ...
##  $ vitimasfatais            : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ acidente_verificado      : chr  "Longo da via" "Cruzamento" "Longo da via" "Longo da via" ...
##  $ tempo_clima              : chr  "Bom" "Bom" "Bom" "Bom" ...
##  $ situacao_semaforo        : chr  "Não existe" "Sem defeito" "Não existe" "Sem defeito" ...
##  $ sinalizacao              : chr  "Perfeito estado" "Perfeito estado" "Incompleta" "Perfeito estado" ...
##  $ condicao_via             : chr  "Seca" "Oleosa" "Seca" "Seca" ...
##  $ conservacao_via          : chr  "Perfeito estado" "Perfeito estado" "Perfeito estado" "Perfeito estado" ...
##  $ ponto_controle           : chr  "Outros" "Outros" "Não existe" "Faixa de pedestre" ...
##  $ situacao_placa           : chr  "Não há placas" "Outras" "Não há placas" "Outras" ...
##  $ velocidade_max_via       : chr  "" "" "" "" ...
##  $ mao_direcao              : chr  "Dupla" "Única" "Dupla" "Única" ...
##  $ divisao_via1             : chr  "Faixa contínua" "Não existe" "Não existe" "Canal" ...
##  $ divisao_via2             : chr  "Faixa seccionada" "" "" "" ...
##  $ divisao_via3             : chr  "" "" "" "" ...

Tratamento de dados

Colocando as colunas em minúsculo

names(sinistrosRecifeRaw) <- tolower(names(sinistrosRecifeRaw))

Modifcando a data para formato date e extraindo ano, mês e dia para analises futuras

sinistrosRecifeRaw$data <- as.Date(sinistrosRecifeRaw$data, format = "%Y-%m-%d")
sinistrosRecifeRaw$ano <- as.integer(format(sinistrosRecifeRaw$data, "%Y"))
sinistrosRecifeRaw$mes <- as.integer(format(sinistrosRecifeRaw$data, "%m"))
sinistrosRecifeRaw$dia <- as.integer(format(sinistrosRecifeRaw$data, "%d"))

Extraindo o intervalo do dia a partir do campo hora

#variaveis auxiliares para tratamento do campo hora
time_06 <- as.POSIXct("06:00", format = "%H:%M")
time_12 <- as.POSIXct("12:00", format = "%H:%M")
time_18 <- as.POSIXct("18:00", format = "%H:%M")
time_2359 <- as.POSIXct("23:59", format = "%H")
time_00 <- as.POSIXct("00:00", format = "%H:%M")

sinistrosRecifeRaw <- sinistrosRecifeRaw %>% 
  mutate(intervalo_dia = case_when(
    as.POSIXct(hora, format = "%H:%M") >= time_06  & as.POSIXct(hora, format = "%H:%M") < time_12 ~ "MANHA",
    as.POSIXct(hora, format = "%H:%M") >= time_12  & as.POSIXct(hora, format = "%H:%M") < time_18 ~ "TARDE",
    as.POSIXct(hora, format = "%H:%M") >= time_18  & as.POSIXct(hora, format = "%H") <= time_2359 ~ "NOITE",
    as.POSIXct(hora, format = "%H:%M") >= time_00  & as.POSIXct(hora, format = "%H:%M") < time_06 ~ "MADRUGADA",
    TRUE ~ "NAO INFORMADO"
  )
)

Extraindo o dia da semana a partir do campo data

sinistrosRecifeRaw$dia_semana <- weekdays(as.Date(sinistrosRecifeRaw$data))

Criando uma coluna a partir de varias usando a função coalesce

sinistrosRecifeRaw <- sinistrosRecifeRaw %>% 
  mutate(automoveis = coalesce(auto, onibus, caminhao, viatura, ciclom)) %>%
  mutate(divisao_da_via = coalesce(divisao_via1, divisao_via2, divisao_via3)) %>%
  mutate(outros_envolvidos = coalesce(outros, ciclista, pedestre) 
)

Remove as colunas que já foram unificadas e não serão necessarias mais pra frente

sinistrosRecifeRaw <-  sinistrosRecifeRaw %>% 
  select( -c("auto", "onibus", "caminhao", "viatura", "ciclom","divisao_via1","divisao_via2","divisao_via3", "outros", "ciclista", "pedestre"))

Transforma todos os valores em “maiusculas”

sinistrosRecifeRaw$natureza_acidente <- toupper(sinistrosRecifeRaw$natureza_acidente)
sinistrosRecifeRaw$situacao <- toupper(sinistrosRecifeRaw$situacao)
sinistrosRecifeRaw$bairro <- toupper(sinistrosRecifeRaw$bairro)
sinistrosRecifeRaw$sentido_via <- toupper(sinistrosRecifeRaw$sentido_via)
sinistrosRecifeRaw$tipo <- toupper(sinistrosRecifeRaw$tipo)
sinistrosRecifeRaw$intervalo_dia <- toupper(sinistrosRecifeRaw$intervalo_dia)
sinistrosRecifeRaw$dia_semana <- toupper(sinistrosRecifeRaw$dia_semana)
sinistrosRecifeRaw$acidente_verificado <- toupper(sinistrosRecifeRaw$acidente_verificado)
sinistrosRecifeRaw$tempo_clima <- toupper(sinistrosRecifeRaw$tempo_clima)
sinistrosRecifeRaw$situacao_semaforo <- toupper(sinistrosRecifeRaw$situacao_semaforo)
sinistrosRecifeRaw$sinalizacao <- toupper(sinistrosRecifeRaw$sinalizacao)
sinistrosRecifeRaw$condicao_via <- toupper(sinistrosRecifeRaw$condicao_via)
sinistrosRecifeRaw$conservacao_via <- toupper(sinistrosRecifeRaw$conservacao_via)
sinistrosRecifeRaw$ponto_controle <- toupper(sinistrosRecifeRaw$ponto_controle)
sinistrosRecifeRaw$situacao_placa <- toupper(sinistrosRecifeRaw$situacao_placa)
sinistrosRecifeRaw$velocidade_max_via <- toupper(sinistrosRecifeRaw$velocidade_max_via)
sinistrosRecifeRaw$mao_direcao <- toupper(sinistrosRecifeRaw$mao_direcao)
sinistrosRecifeRaw$divisao_da_via <- toupper(sinistrosRecifeRaw$divisao_da_via)

Criando a coluna de rotulo (o “y” usado nos modelos)

sinistrosRecifeFinal <- sinistrosRecifeRaw %>% 
  mutate(acidente_com_vitima = case_when(
    natureza_acidente == 'COM VÍTIMA' ~ 1,
    natureza_acidente == 'VÍTIMA FATAL' ~ 1,
    TRUE ~ 0
  )
)
sinistrosRecifeFinal$acidente_com_vitima <- as.integer(sinistrosRecifeFinal$acidente_com_vitima)

Movendo o rotulo(“y”) para a primeira posicao do dataset

sinistrosRecifeFinal <- sinistrosRecifeFinal %>% select(acidente_com_vitima, everything())

Preenchendo valores faltantes checando se o tamanho do conteudo preenchido é menor que 1

sinistrosRecifeFinal$bairro[str_length(sinistrosRecifeFinal$bairro) < 1  ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$sentido_via[str_length(sinistrosRecifeFinal$sentido_via) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$tipo[str_length(sinistrosRecifeFinal$tipo) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$intervalo_dia[str_length(sinistrosRecifeFinal$intervalo_dia) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$dia_semana[str_length(sinistrosRecifeFinal$dia_semana) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$tempo_clima[str_length(sinistrosRecifeFinal$tempo_clima) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$situacao_semaforo[str_length(sinistrosRecifeFinal$situacao_semaforo) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$situacao_placa[str_length(sinistrosRecifeFinal$situacao_placa) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$velocidade_max_via[str_length(sinistrosRecifeFinal$velocidade_max_via) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$divisao_da_via[str_length(sinistrosRecifeFinal$divisao_da_via) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$situacao[str_length(sinistrosRecifeFinal$situacao) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$natureza_acidente[str_length(sinistrosRecifeFinal$natureza_acidente) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$acidente_verificado[str_length(sinistrosRecifeFinal$acidente_verificado) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$sinalizacao[str_length(sinistrosRecifeFinal$sinalizacao) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$conservacao_via[str_length(sinistrosRecifeFinal$conservacao_via) < 1  ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$condicao_via[str_length(sinistrosRecifeFinal$condicao_via) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$ponto_controle[str_length(sinistrosRecifeFinal$ponto_controle) < 1 ] <- "NAO INFORMADO" 
sinistrosRecifeFinal$mao_direcao[str_length(sinistrosRecifeFinal$mao_direcao) < 1 ] <- "NAO INFORMADO" 

Observando quantitativamente os dados

##                                            variable q_zeros      p_zeros q_na
## acidente_com_vitima             acidente_com_vitima     546 0.2294117647    0
## data                                           data       0 0.0000000000    0
## hora                                           hora       0 0.0000000000    0
## natureza_acidente                 natureza_acidente       0 0.0000000000    0
## situacao                                   situacao       0 0.0000000000    0
## bairro                                       bairro       0 0.0000000000    0
## endereco                                   endereco       0 0.0000000000    0
## numero                                       numero       0 0.0000000000    0
## detalhe_endereco_acidente detalhe_endereco_acidente       0 0.0000000000    0
## complemento                             complemento       0 0.0000000000    0
## bairro_cruzamento                 bairro_cruzamento       0 0.0000000000    0
## num_semaforo                           num_semaforo       1 0.0004201681    0
## sentido_via                             sentido_via       0 0.0000000000    0
## tipo                                           tipo       0 0.0000000000    0
## moto                                           moto     946 0.3974789916    0
## vitimas                                     vitimas     557 0.2340336134    0
## vitimasfatais                         vitimasfatais    2355 0.9894957983    0
## acidente_verificado             acidente_verificado       0 0.0000000000    0
## tempo_clima                             tempo_clima       0 0.0000000000    0
## situacao_semaforo                 situacao_semaforo       0 0.0000000000    0
## sinalizacao                             sinalizacao       0 0.0000000000    0
## condicao_via                           condicao_via       0 0.0000000000    0
## conservacao_via                     conservacao_via       0 0.0000000000    0
## ponto_controle                       ponto_controle       0 0.0000000000    0
## situacao_placa                       situacao_placa       0 0.0000000000    0
## velocidade_max_via               velocidade_max_via       0 0.0000000000    0
## mao_direcao                             mao_direcao       0 0.0000000000    0
## ano                                             ano       0 0.0000000000    0
## mes                                             mes       0 0.0000000000    0
## dia                                             dia       0 0.0000000000    0
## intervalo_dia                         intervalo_dia       0 0.0000000000    0
## dia_semana                               dia_semana       0 0.0000000000    0
## automoveis                               automoveis     645 0.2710084034    0
## divisao_da_via                       divisao_da_via       0 0.0000000000    0
## outros_envolvidos                 outros_envolvidos    2365 0.9936974790    0
##                           p_na q_inf p_inf      type unique
## acidente_com_vitima          0     0     0   integer      2
## data                         0     0     0      Date    363
## hora                         0     0     0 character   1019
## natureza_acidente            0     0     0 character      4
## situacao                     0     0     0 character      4
## bairro                       0     0     0 character     89
## endereco                     0     0     0 character    551
## numero                       0     0     0 character    909
## detalhe_endereco_acidente    0     0     0 character    505
## complemento                  0     0     0 character   2115
## bairro_cruzamento            0     0     0 character     89
## num_semaforo                 0     0     0 character    333
## sentido_via                  0     0     0 character     42
## tipo                         0     0     0 character     21
## moto                         0     0     0   integer      5
## vitimas                      0     0     0   integer      7
## vitimasfatais                0     0     0   integer      2
## acidente_verificado          0     0     0 character      8
## tempo_clima                  0     0     0 character      4
## situacao_semaforo            0     0     0 character      6
## sinalizacao                  0     0     0 character      5
## condicao_via                 0     0     0 character      5
## conservacao_via              0     0     0 character      5
## ponto_controle               0     0     0 character      6
## situacao_placa               0     0     0 character     21
## velocidade_max_via           0     0     0 character     12
## mao_direcao                  0     0     0 character      3
## ano                          0     0     0   integer      1
## mes                          0     0     0   integer     12
## dia                          0     0     0   integer     31
## intervalo_dia                0     0     0 character      4
## dia_semana                   0     0     0 character      7
## automoveis                   0     0     0   integer      8
## divisao_da_via               0     0     0 character      9
## outros_envolvidos            0     0     0   integer      3

Construindo gráficos

observando quantitativamente os dados

observando quantitativamente os dados

Enriquecimento de dados

# Junta os dados das duas fontes acima a partir das colunas ["bairro"] existente em cada fonte
sinistrosRecifeFinal <- left_join(sinistrosRecifeFinal, numero_acidentes_com_vitimas_por_bairro, by = c("bairro" = "bairro")) 

#Se algum bairro não apresentar o total de acidentes c/vitimas será preenchido com ZERO (0) para evitar a existencia de NA value
sinistrosRecifeFinal$total_acidentes_com_vitimas_por_bairro <-
  replace(
    sinistrosRecifeFinal$total_acidentes_com_vitimas_por_bairro,
    is.na(sinistrosRecifeFinal$total_acidentes_com_vitimas_por_bairro),
    0
  )

Removendo da memoria alguns objetos que não serão mais utilizados

rm( sinistrosRecifeRaw,
    acidentes_com_vitimas_por_bairro,
    acidentes_condicao_via,
    acidentes_dia_semana,
    acidentes_interv_dia,
    bairro_acidente,
    condicao_tempo_clima,
    direcao_via,
    distribuicao_natureza_acidente,
    estado_vias,
    numero_acidentes_com_vitimas_por_bairro,
    ocorrencias_mes,
    ocorrencias_situacao,
    situacao_placa_amostra,
    tipos_acidentes,
    velocidade_max_via_amostra
    )

Filtrando apenas os registros cujo status é finalizado que é o que interessa para treinar os modelos

sinistrosRecifeFinal <- sinistrosRecifeFinal %>%  filter(situacao == 'FINALIZADA') 
ncol(sinistrosRecifeFinal)
## [1] 36
nrow(sinistrosRecifeFinal)
## [1] 2096

Removendo colunas após a realização da permuta de variáveis

sinistrosRecifeFinal <-  sinistrosRecifeFinal %>% 
  select( -c("data","hora","ano", "mes", "dia","vitimas", "vitimasfatais", "bairro", "endereco", "numero", "detalhe_endereco_acidente", "complemento", "natureza_acidente", "sentido_via", "num_semaforo", "situacao", "bairro_cruzamento"))

Conferindo a remoção das colunas

status(sinistrosRecifeFinal)
##                                                                      variable
## acidente_com_vitima                                       acidente_com_vitima
## tipo                                                                     tipo
## moto                                                                     moto
## acidente_verificado                                       acidente_verificado
## tempo_clima                                                       tempo_clima
## situacao_semaforo                                           situacao_semaforo
## sinalizacao                                                       sinalizacao
## condicao_via                                                     condicao_via
## conservacao_via                                               conservacao_via
## ponto_controle                                                 ponto_controle
## situacao_placa                                                 situacao_placa
## velocidade_max_via                                         velocidade_max_via
## mao_direcao                                                       mao_direcao
## intervalo_dia                                                   intervalo_dia
## dia_semana                                                         dia_semana
## automoveis                                                         automoveis
## divisao_da_via                                                 divisao_da_via
## outros_envolvidos                                           outros_envolvidos
## total_acidentes_com_vitimas_por_bairro total_acidentes_com_vitimas_por_bairro
##                                        q_zeros     p_zeros q_na p_na q_inf
## acidente_com_vitima                        441 0.210400763    0    0     0
## tipo                                         0 0.000000000    0    0     0
## moto                                       803 0.383110687    0    0     0
## acidente_verificado                          0 0.000000000    0    0     0
## tempo_clima                                  0 0.000000000    0    0     0
## situacao_semaforo                            0 0.000000000    0    0     0
## sinalizacao                                  0 0.000000000    0    0     0
## condicao_via                                 0 0.000000000    0    0     0
## conservacao_via                              0 0.000000000    0    0     0
## ponto_controle                               0 0.000000000    0    0     0
## situacao_placa                               0 0.000000000    0    0     0
## velocidade_max_via                           0 0.000000000    0    0     0
## mao_direcao                                  0 0.000000000    0    0     0
## intervalo_dia                                0 0.000000000    0    0     0
## dia_semana                                   0 0.000000000    0    0     0
## automoveis                                 576 0.274809160    0    0     0
## divisao_da_via                               0 0.000000000    0    0     0
## outros_envolvidos                         2082 0.993320611    0    0     0
## total_acidentes_com_vitimas_por_bairro       7 0.003339695    0    0     0
##                                        p_inf      type unique
## acidente_com_vitima                        0   integer      2
## tipo                                       0 character     11
## moto                                       0   integer      5
## acidente_verificado                        0 character      8
## tempo_clima                                0 character      4
## situacao_semaforo                          0 character      6
## sinalizacao                                0 character      5
## condicao_via                               0 character      5
## conservacao_via                            0 character      5
## ponto_controle                             0 character      6
## situacao_placa                             0 character      5
## velocidade_max_via                         0 character      6
## mao_direcao                                0 character      3
## intervalo_dia                              0 character      4
## dia_semana                                 0 character      7
## automoveis                                 0   integer      6
## divisao_da_via                             0 character      9
## outros_envolvidos                          0   integer      3
## total_acidentes_com_vitimas_por_bairro     0   numeric     43

Convertendo em valores binários

#definindo uma semente
set.seed(1401)

sinistrosRecifeDummy <- dummyVars(" ~ .", data=sinistrosRecifeFinal)
sinistrosRecifeBinarizado <- data.frame(predict(sinistrosRecifeDummy, newdata=sinistrosRecifeFinal))

Treino e Teste: Pré-processamento

Particionando os dados

#converte a coluna usada como "y" em factor
sinistrosRecifeBinarizado$acidente_com_vitima = as.factor(sinistrosRecifeBinarizado$acidente_com_vitima)
# cria a partição 70-30
particao_sinistros = caret::createDataPartition(sinistrosRecifeBinarizado$acidente_com_vitima, p=.7, list = F)
# treino
treino_sinistros = sinistrosRecifeBinarizado[particao_sinistros, ]
# - treino = teste
teste_sinistros = sinistrosRecifeBinarizado[-particao_sinistros, ]

Criando o controle para validação cruzada

train.control <- trainControl(method = "cv", number = 10, verboseIter = T)

Treinando os modelos

Regressão Linear
#sinistros_LM <- train(acidente_com_vitima ~ ., data = treino_sinistros, method = "lm", trControl = train.control)
#summary(sinistros_LM) # sumário do modelo linear
#var_importance <- varImp(sinistros_LM, scale = FALSE)
#plot(var_importance, top = 20) # importância das variáveis
Bagging com Floresta Aleatória
## + Fold01: mtry= 2 
## - Fold01: mtry= 2 
## + Fold01: mtry=45 
## - Fold01: mtry=45 
## + Fold01: mtry=88 
## - Fold01: mtry=88 
## + Fold02: mtry= 2 
## - Fold02: mtry= 2 
## + Fold02: mtry=45 
## - Fold02: mtry=45 
## + Fold02: mtry=88 
## - Fold02: mtry=88 
## + Fold03: mtry= 2 
## - Fold03: mtry= 2 
## + Fold03: mtry=45 
## - Fold03: mtry=45 
## + Fold03: mtry=88 
## - Fold03: mtry=88 
## + Fold04: mtry= 2 
## - Fold04: mtry= 2 
## + Fold04: mtry=45 
## - Fold04: mtry=45 
## + Fold04: mtry=88 
## - Fold04: mtry=88 
## + Fold05: mtry= 2 
## - Fold05: mtry= 2 
## + Fold05: mtry=45 
## - Fold05: mtry=45 
## + Fold05: mtry=88 
## - Fold05: mtry=88 
## + Fold06: mtry= 2 
## - Fold06: mtry= 2 
## + Fold06: mtry=45 
## - Fold06: mtry=45 
## + Fold06: mtry=88 
## - Fold06: mtry=88 
## + Fold07: mtry= 2 
## - Fold07: mtry= 2 
## + Fold07: mtry=45 
## - Fold07: mtry=45 
## + Fold07: mtry=88 
## - Fold07: mtry=88 
## + Fold08: mtry= 2 
## - Fold08: mtry= 2 
## + Fold08: mtry=45 
## - Fold08: mtry=45 
## + Fold08: mtry=88 
## - Fold08: mtry=88 
## + Fold09: mtry= 2 
## - Fold09: mtry= 2 
## + Fold09: mtry=45 
## - Fold09: mtry=45 
## + Fold09: mtry=88 
## - Fold09: mtry=88 
## + Fold10: mtry= 2 
## - Fold10: mtry= 2 
## + Fold10: mtry=45 
## - Fold10: mtry=45 
## + Fold10: mtry=88 
## - Fold10: mtry=88 
## Aggregating results
## Selecting tuning parameters
## Fitting mtry = 88 on full training set

Árvore de Decisão
## + Fold01: cp=0.02265 
## - Fold01: cp=0.02265 
## + Fold02: cp=0.02265 
## - Fold02: cp=0.02265 
## + Fold03: cp=0.02265 
## - Fold03: cp=0.02265 
## + Fold04: cp=0.02265 
## - Fold04: cp=0.02265 
## + Fold05: cp=0.02265 
## - Fold05: cp=0.02265 
## + Fold06: cp=0.02265 
## - Fold06: cp=0.02265 
## + Fold07: cp=0.02265 
## - Fold07: cp=0.02265 
## + Fold08: cp=0.02265 
## - Fold08: cp=0.02265 
## + Fold09: cp=0.02265 
## - Fold09: cp=0.02265 
## + Fold10: cp=0.02265 
## - Fold10: cp=0.02265 
## Aggregating results
## Selecting tuning parameters
## Fitting cp = 0.0227 on full training set

Boosting com Boosted Generalized Linear Model
## + Fold01: mstop=150, prune=no 
## - Fold01: mstop=150, prune=no 
## + Fold02: mstop=150, prune=no 
## - Fold02: mstop=150, prune=no 
## + Fold03: mstop=150, prune=no 
## - Fold03: mstop=150, prune=no 
## + Fold04: mstop=150, prune=no 
## - Fold04: mstop=150, prune=no 
## + Fold05: mstop=150, prune=no 
## - Fold05: mstop=150, prune=no 
## + Fold06: mstop=150, prune=no 
## - Fold06: mstop=150, prune=no 
## + Fold07: mstop=150, prune=no 
## - Fold07: mstop=150, prune=no 
## + Fold08: mstop=150, prune=no 
## - Fold08: mstop=150, prune=no 
## + Fold09: mstop=150, prune=no 
## - Fold09: mstop=150, prune=no 
## + Fold10: mstop=150, prune=no 
## - Fold10: mstop=150, prune=no 
## Aggregating results
## Selecting tuning parameters
## Fitting mstop = 150, prune = no on full training set

KNN
## + Fold01: k=5 
## - Fold01: k=5 
## + Fold01: k=7 
## - Fold01: k=7 
## + Fold01: k=9 
## - Fold01: k=9 
## + Fold02: k=5 
## - Fold02: k=5 
## + Fold02: k=7 
## - Fold02: k=7 
## + Fold02: k=9 
## - Fold02: k=9 
## + Fold03: k=5 
## - Fold03: k=5 
## + Fold03: k=7 
## - Fold03: k=7 
## + Fold03: k=9 
## - Fold03: k=9 
## + Fold04: k=5 
## - Fold04: k=5 
## + Fold04: k=7 
## - Fold04: k=7 
## + Fold04: k=9 
## - Fold04: k=9 
## + Fold05: k=5 
## - Fold05: k=5 
## + Fold05: k=7 
## - Fold05: k=7 
## + Fold05: k=9 
## - Fold05: k=9 
## + Fold06: k=5 
## - Fold06: k=5 
## + Fold06: k=7 
## - Fold06: k=7 
## + Fold06: k=9 
## - Fold06: k=9 
## + Fold07: k=5 
## - Fold07: k=5 
## + Fold07: k=7 
## - Fold07: k=7 
## + Fold07: k=9 
## - Fold07: k=9 
## + Fold08: k=5 
## - Fold08: k=5 
## + Fold08: k=7 
## - Fold08: k=7 
## + Fold08: k=9 
## - Fold08: k=9 
## + Fold09: k=5 
## - Fold09: k=5 
## + Fold09: k=7 
## - Fold09: k=7 
## + Fold09: k=9 
## - Fold09: k=9 
## + Fold10: k=5 
## - Fold10: k=5 
## + Fold10: k=7 
## - Fold10: k=7 
## + Fold10: k=9 
## - Fold10: k=9 
## Aggregating results
## Selecting tuning parameters
## Fitting k = 7 on full training set

Selecionando o melhor modelo
melhor_modelo <- resamples(list(
  #LM = sinistros_LM, 
  KNN = sinistros_KNN, 
  RPART = sinistros_RPART, 
  RF = sinistros_RF,   
  ADABOOST = sinistros_ADA
))

summary(melhor_modelo)
## 
## Call:
## summary.resamples(object = melhor_modelo)
## 
## Models: KNN, RPART, RF, ADABOOST 
## Number of resamples: 10 
## 
## Accuracy 
##               Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## KNN      0.8163265 0.8384354 0.8435374 0.8439987 0.8551859 0.8639456    0
## RPART    0.8503401 0.8603229 0.8775510 0.8746669 0.8888967 0.8979592    0
## RF       0.8707483 0.8837597 0.8877551 0.8978334 0.9214193 0.9319728    0
## ADABOOST 0.8424658 0.8690476 0.8843537 0.8828394 0.8911565 0.9315068    0
## 
## Kappa 
##               Min.   1st Qu.    Median      Mean   3rd Qu.      Max. NA's
## KNN      0.3197913 0.3940855 0.4432638 0.4260329 0.4563530 0.5196826    0
## RPART    0.4464766 0.5254149 0.5855512 0.5661974 0.6246062 0.6388206    0
## RF       0.5536199 0.6111716 0.6464390 0.6736003 0.7607615 0.8003260    0
## ADABOOST 0.4110838 0.5192768 0.5987918 0.5781570 0.6233016 0.7734327    0
Executando um predict de test com todos os modelos

Executando um predict de test com o melhor modelo (Floresta Aleatória) analisado pela média da acurácia

Criando a matriz de confusão e visualizando a acuidade do melhor modelo (Floresta Aleatória)

# cria predição
predicao_sinistros_RF <- predict(sinistros_RF, teste_sinistros) 
cm_sinistros_RF <- confusionMatrix(predicao_sinistros_RF, teste_sinistros$acidente_com_vitima)
cm_sinistros_RF
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction   0   1
##          0  89  28
##          1  43 468
##                                           
##                Accuracy : 0.8869          
##                  95% CI : (0.8595, 0.9106)
##     No Information Rate : 0.7898          
##     P-Value [Acc > NIR] : 1.099e-10       
##                                           
##                   Kappa : 0.6447          
##                                           
##  Mcnemar's Test P-Value : 0.09661         
##                                           
##             Sensitivity : 0.6742          
##             Specificity : 0.9435          
##          Pos Pred Value : 0.7607          
##          Neg Pred Value : 0.9159          
##              Prevalence : 0.2102          
##          Detection Rate : 0.1417          
##    Detection Prevalence : 0.1863          
##       Balanced Accuracy : 0.8089          
##                                           
##        'Positive' Class : 0               
## 
cm_sinistros_RF$table
##           Reference
## Prediction   0   1
##          0  89  28
##          1  43 468
# Expected Accuracy (AccE) = Acuidade Esperada = estimativa de acuidade "esperada", ou seja, 
#uma acuidade mínima que poderia ser conseguida simplesmente "chutando" a classe de forma aleatória. 
gtBaixa <- cm_sinistros_RF$table[1]+cm_sinistros_RF$table[2]
gtAlta <- cm_sinistros_RF$table[3]+cm_sinistros_RF$table[4]
pdBaixa <- cm_sinistros_RF$table[1]+cm_sinistros_RF$table[2]
pdAlta <- cm_sinistros_RF$table[3]+cm_sinistros_RF$table[4]
gtTotal <- gtAlta + gtBaixa
estAcc <- (gtBaixa*pdBaixa/gtTotal^2)+(gtAlta*pdAlta/gtTotal^2)
#acuidade
estAcc
## [1] 0.6679784